# polyfill 解决方案

# 一、babel-polyfill

在入口js文件引入执行

import 'babel-polyfill';
1

# 二、babel-preset-env

babel-preset-env 也支持针对指定目标环境选择需要的 polyfill 了,只需引入 babel-polyfill,并在 babelrc 中声明 useBuiltIns,babel 会将引入的 babel-polyfill 自动替换为所需的 polyfill。

{
  "presets": [
    ["env", {
      "targets": {
        "browsers": ["IE >= 9"]
      },
      "useBuiltIns": true
    }]
  ]
}
1
2
3
4
5
6
7
8
9
10

# 三、polyfill.io 国内访问速度较慢

https://cdn.polyfill.io/v3/url-builder/ (opens new window) 上可以自定义勾选需要支持的 polyfill 。

尝试在不同的浏览器下请求 https://cdn.polyfill.io/v2/polyfill.js 这个文件,服务器会判断浏览器 UA 返回不同的 polyfill 文件,你所要做的仅仅是在页面上引入这个文件,polyfill 这件事就自动以最优雅的方式解决了。更加让人喜悦的是,polyfill.io 不旦提供了 cdn 的服务,也开源了自己的实现方案 polyfill-service。简单配置一下,便可拥有自己的 polyfill service 了。

polyfill.io 对全球常用浏览器的判断基本问题不大,面对国内纷繁复杂的浏览器不确定是否能准确识别从而返回需要的 polyfill 代码就不得而知。

# 四、阿里云版 polyfill 解决 polyfill.io 慢的问题

先在 polufill.io 上勾选自己需要的 polyfill 获取地址

比如勾选 es2015es2016es2017es2018,后,获得地址:

<script
    crossorigin="anonymous"
    src="https://polyfill.io/v3/polyfill.min.js?features=es2015%2Ces2016%2Ces2017%2Ces2018"
>
</script>
1
2
3
4
5

将查询字符串(querystring)的问号之前的地址更换为 https://polyfill.alicdn.com/polyfill.min.js 即可:

<script
    crossorigin="anonymous"
    src="https://polyfill.alicdn.com/polyfill.min.js?features=es2015%2Ces2016%2Ces2017%2Ces2018"
>
</script>
1
2
3
4
5